package view.hoidap.dmchude;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.event.ActionEvent;

import oracle.adf.model.BindingContext;

import oracle.adf.model.binding.DCIteratorBinding;
import oracle.adf.view.rich.component.rich.RichPopup;
import oracle.adf.view.rich.component.rich.output.RichOutputText;
import oracle.adf.view.rich.event.DialogEvent;
import oracle.adf.view.rich.event.PopupCanceledEvent;

import oracle.binding.BindingContainer;

import oracle.jbo.Key;
import oracle.jbo.Row;
import oracle.jbo.ViewCriteria;
import oracle.jbo.ViewCriteriaManager;
import oracle.jbo.ViewObject;

import view.common.Utils;

public class DmchudeBean {
    private RichPopup popupThemMoiVN;
    private RichPopup popupXemVN;
    private RichPopup popupThemMoiEN;
    private RichPopup popupValidateVN;
    private RichPopup popupValidateEN;
    private RichPopup popupXemEN;
    private RichPopup popupDeleteVN;
    private RichPopup popupDeleteEn;

    private String TenchudeVN;
    private String TenchudeEN;
    private String title;

    private Date Ngayhethanbd;
    private Date Ngayhethankt;
    private Date NgayhethanENBd;
    private Date NgayhethanENKt;
    private RichOutputText inputtextOperator;

    public DmchudeBean() {
        if (Boolean.FALSE.equals(Utils.getElExpression("#{adfFacesContext.postback}"))) {
            DCIteratorBinding iterHoidapVn =
                Utils.getIteratorBinding("HoidapLinhvucViewVN1Iterator");
            iterHoidapVn.getViewObject().getViewCriteriaManager().clearViewCriterias();
            iterHoidapVn.executeQuery();

            DCIteratorBinding iterHoidapEn =
                Utils.getIteratorBinding("HoidapLinhvucViewEN1Iterator");
            iterHoidapEn.getViewObject().getViewCriteriaManager().clearViewCriterias();
            iterHoidapEn.executeQuery();
        }
    }

    public void createVN(ActionEvent actionEvent) {
        Utils.execute("CreateInsertVN");
        Utils.showPopup(popupThemMoiVN);
        inputtextOperator.setValue("0");
    }

    public void updateVN(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("HoidapLinhvucViewVN1Iterator").getCurrentRow() ==
            null) {
            String meg = "Bạn chưa chọn bản ghi nào.";
            Utils.showMessage(Utils.MSG_INFO, meg);
        } else {
            Utils.showPopup(popupThemMoiVN);
            inputtextOperator.setValue("1");
        }
    }

    public void commitDialogVN(DialogEvent dialogEvent) {
        try {
            int operater = inputtextOperator.getValue().equals("1") ? 1 : 0;
            DCIteratorBinding iterHoidaplinhvucVN =
                Utils.getIteratorBinding("HoidapLinhvucViewVN1Iterator");
            iterHoidaplinhvucVN.getCurrentRow().setAttribute("NgonNgu", "vi");
            String rowKey = "";
            if (iterHoidaplinhvucVN.getCurrentRow() != null) {
                rowKey =
                        iterHoidaplinhvucVN.getCurrentRow().getKey().toStringFormat(false);
            }
            Utils.execute("Commit");
            Utils.iteratorRefresh("HoidapLinhvucViewVN1Iterator");
            Utils.iteratorRefresh("HoidapLinhvucViewEN1Iterator");
            iterHoidaplinhvucVN.setCurrentRowWithKey(rowKey);
            if (operater == 0) {
                ViewObject vo = iterHoidaplinhvucVN.getViewObject();
                ViewCriteria vc =
                    vo.getViewCriteriaManager().getViewCriteria("HoidapLinhvucViewVNCriteria");
                vo.ensureVariableManager().setVariableValue("varTenvn", "%");
                vo.ensureVariableManager().setVariableValue("varNgayhhbd", "");
                vo.ensureVariableManager().setVariableValue("varNgayhhkt", "");
                vo.getViewCriteriaManager().removeViewCriteria("HoidapLinhvucViewVNCriteria");
                vo.getViewCriteriaManager().applyViewCriteria(vc);
                iterHoidaplinhvucVN.executeQuery();
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public void cancelDiaglogVN(PopupCanceledEvent popupCanceledEvent) {
        DCIteratorBinding iterHoidaplinhvucVN =
            Utils.getIteratorBinding("HoidapLinhvucViewVN1Iterator");
        String rowKey = "";
        if (iterHoidaplinhvucVN.getCurrentRow() != null) {
            rowKey =
                    iterHoidaplinhvucVN.getCurrentRow().getKey().toStringFormat(false);
        }
        Utils.execute("Rollback");
        iterHoidaplinhvucVN.setCurrentRowWithKey(rowKey);
    }
    
    public void deleteDiaglogVN(DialogEvent dialogEvent) {
        try {
            if (Utils.getIteratorBinding("HoidapLinhvucViewVN1Iterator").getCurrentRow() ==
                null) {
                Utils.showMessage(Utils.MSG_INFO, "Bạn chưa chọn bản ghi cần xóa.");
            } else {
                Utils.execute("DeleteVN");
                List constrainExist = Utils.execute("Commit");
                if (constrainExist != null &&
                    constrainExist.toString().contains("HOIDAP_HOIDAP_LINHVUC_FK")) {
                    Utils.showPopup(popupValidateVN);
                }
                Utils.iteratorRefresh("HoidapLinhvucViewVN1Iterator");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void createInsertEn(ActionEvent actionEvent) {
        Utils.execute("CreateInsertEN");
        Utils.showPopup(popupThemMoiEN);
        inputtextOperator.setValue("0");
    }

    public void updateEn(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("HoidapLinhvucViewEN1Iterator").getCurrentRow() ==
            null) {
            Utils.showMessage(Utils.MSG_INFO, "Bạn chưa chọn bản ghi nào.");
        } else {
            Utils.showPopup(popupThemMoiEN);
            inputtextOperator.setValue("1");
        }
    }

    public void commitDialogEn(DialogEvent dialogEvent) {
        try {
            int operater = inputtextOperator.getValue().equals("1") ? 1 : 0;
            DCIteratorBinding iterHoidaplinhvucEn =
                Utils.getIteratorBinding("HoidapLinhvucViewEN1Iterator");
            iterHoidaplinhvucEn.getCurrentRow().setAttribute("NgonNgu", "en");
            String rowKey = "";
            if (iterHoidaplinhvucEn.getCurrentRow() != null) {
                rowKey =
                        iterHoidaplinhvucEn.getCurrentRow().getKey().toStringFormat(false);
            }
            Utils.execute("Commit");
            Utils.iteratorRefresh("HoidapLinhvucViewEN1Iterator");
            Utils.iteratorRefresh("HoidapLinhvucViewVN1Iterator");
            iterHoidaplinhvucEn.setCurrentRowWithKey(rowKey);
            if (operater == 0) {
                ViewObject vo = iterHoidaplinhvucEn.getViewObject();
                ViewCriteria vc =
                    vo.getViewCriteriaManager().getViewCriteria("HoidapLinhvucViewENCriteria");
                vo.ensureVariableManager().setVariableValue("varTenEn", "%");
                vo.ensureVariableManager().setVariableValue("varNgayhhbdEn",
                                                            "");
                vo.ensureVariableManager().setVariableValue("varNgayhhKtEn",
                                                            "");
                vo.getViewCriteriaManager().removeViewCriteria("HoidapLinhvucViewENCriteria");
                vo.getViewCriteriaManager().applyViewCriteria(vc);
                iterHoidaplinhvucEn.executeQuery();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void cancelDiaglogEn(PopupCanceledEvent popupCanceledEvent) {
        DCIteratorBinding iterHoidaplinhvucEn =
            Utils.getIteratorBinding("HoidapLinhvucViewEN1Iterator");
        iterHoidaplinhvucEn.getCurrentRow().setAttribute("NgonNgu", "en");
        String rowKey = "";
        if (iterHoidaplinhvucEn.getCurrentRow() != null) {
            rowKey =
                    iterHoidaplinhvucEn.getCurrentRow().getKey().toStringFormat(false);
        }
        Utils.execute("Rollback");
        iterHoidaplinhvucEn.setCurrentRowWithKey(rowKey);
    }

    public void deleteDiaglogEn(DialogEvent dialogEvent) {
        try {
            if (Utils.getIteratorBinding("HoidapLinhvucViewEN1Iterator").getCurrentRow() ==
                null) {
                Utils.showMessage(Utils.MSG_INFO, "Bạn chưa chọn bản ghi cần xóa.");
            } else {
                Utils.execute("DeleteEN");
                List constrainExist = Utils.execute("Commit");
                if (constrainExist != null &&
                    constrainExist.toString().contains("HOIDAP_HOIDAP_LINHVUC_FK")) {
                   Utils.showPopup(popupValidateEN);
                }
                Utils.iteratorRefresh("HoidapLinhvucViewEN1Iterator");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void searchChudeVN() {
        try {
            if (getNgayhethanbd() != null && getNgayhethankt() != null &&
                getNgayhethanbd().after(getNgayhethankt())) {
                String meg = "Bạn phải nhập đến ngày lớn hơn từ ngày";
                Utils.showMessage(Utils.MSG_ERROR, meg);
            } else {
                DCIteratorBinding IteratorHoidapLinhvucVN =
                    Utils.getIteratorBinding("HoidapLinhvucViewVN1Iterator");
                ViewObject vo = IteratorHoidapLinhvucVN.getViewObject();
                ViewCriteria vc =
                    vo.getViewCriteriaManager().getViewCriteria("HoidapLinhvucViewVNCriteria");
                vo.ensureVariableManager().setVariableValue("varTenvn",
                                                            getTenchudeVN());
                vo.ensureVariableManager().setVariableValue("varNgayhhbd",
                                                            getNgayhethanbd());
                vo.ensureVariableManager().setVariableValue("varNgayhhkt",
                                                            getNgayhethankt());

                vo.getViewCriteriaManager().removeViewCriteria("HoidapLinhvucViewVNCriteria");
                vo.getViewCriteriaManager().applyViewCriteria(vc);
                IteratorHoidapLinhvucVN.executeQuery();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void searchChudeEN() {
        try {
            if (getNgayhethanENBd() != null && getNgayhethanENKt() != null &&
                getNgayhethanENBd().after(getNgayhethanENKt())) {
                String meg = "Bạn phải nhập đến ngày lớn hơn từ ngày";
                Utils.showMessage(Utils.MSG_ERROR, meg);
            } else {
                DCIteratorBinding IteratorHoidapLinhvucEN =
                    Utils.getIteratorBinding("HoidapLinhvucViewEN1Iterator");
                ViewObject vo = IteratorHoidapLinhvucEN.getViewObject();
                ViewCriteria vc =
                    vo.getViewCriteriaManager().getViewCriteria("HoidapLinhvucViewENCriteria");
                vo.ensureVariableManager().setVariableValue("varTenEn",
                                                            getTenchudeEN());
                vo.ensureVariableManager().setVariableValue("varNgayhhbdEn",
                                                            getNgayhethanENBd());
                vo.ensureVariableManager().setVariableValue("varNgayhhKtEn",
                                                            getNgayhethanENKt());

                vo.getViewCriteriaManager().removeViewCriteria("HoidapLinhvucViewENCriteria");
                vo.getViewCriteriaManager().applyViewCriteria(vc);
                IteratorHoidapLinhvucEN.executeQuery();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void openPopupDeleteVN(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("HoidapLinhvucViewVN1Iterator").getCurrentRow() ==
            null) {
            String messageText = "Bạn chưa chọn bản ghi cần xóa.";
            Utils.showMessage(Utils.MSG_INFO, messageText);
        } else {
            Utils.showPopup(popupDeleteVN);
        }
    }

    public void openPopupDeleteEN(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("HoidapLinhvucViewEN1Iterator").getCurrentRow() ==
            null) {
            Utils.showMessage(Utils.MSG_INFO, "Bạn chưa chọn bản ghi cần xóa.");
        } else {
            Utils.showPopup(popupDeleteEn);
        }
    }

    public void setPopupThemMoiVN(RichPopup popupThemMoiVN) {
        this.popupThemMoiVN = popupThemMoiVN;
    }

    public RichPopup getPopupThemMoiVN() {
        return popupThemMoiVN;
    }

    public void setPopupThemMoiEN(RichPopup popupThemMoiEN) {
        this.popupThemMoiEN = popupThemMoiEN;
    }

    public RichPopup getPopupThemMoiEN() {
        return popupThemMoiEN;
    }

    public void setTenchudeVN(String TenchudeVN) {
        this.TenchudeVN = TenchudeVN;
    }

    public String getTenchudeVN() {
        return TenchudeVN;
    }

    public void setTenchudeEN(String TenchudeEN) {
        this.TenchudeEN = TenchudeEN;
    }

    public String getTenchudeEN() {
        return TenchudeEN;
    }

    public void setNgayhethanbd(Date Ngayhethanbd) {
        this.Ngayhethanbd = Ngayhethanbd;
    }

    public Date getNgayhethanbd() {
        return Ngayhethanbd;
    }

    public void setNgayhethankt(Date Ngayhethankt) {
        this.Ngayhethankt = Ngayhethankt;
    }

    public Date getNgayhethankt() {
        return Ngayhethankt;
    }

    public void setNgayhethanENBd(Date NgayhethanENBd) {
        this.NgayhethanENBd = NgayhethanENBd;
    }

    public Date getNgayhethanENBd() {
        return NgayhethanENBd;
    }

    public void setNgayhethanENKt(Date NgayhethanENKt) {
        this.NgayhethanENKt = NgayhethanENKt;
    }

    public Date getNgayhethanENKt() {
        return NgayhethanENKt;
    }

    public void setInputtextOperator(RichOutputText inputtextOperator) {
        this.inputtextOperator = inputtextOperator;
    }

    public RichOutputText getInputtextOperator() {
        return inputtextOperator;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() {
        title = "Thêm mới chủ đề";
        int operater = inputtextOperator.getValue().equals("1") ? 1 : 0;
        if (operater == 0) {
            title = "Thêm mới chủ đề";
        } else {
            title = "Sửa chủ đề";
        }
        return title;
    }

    public void setPopupXemVN(RichPopup popupXemVN) {
        this.popupXemVN = popupXemVN;
    }

    public RichPopup getPopupXemVN() {
        return popupXemVN;
    }

    public void setPopupXemEN(RichPopup popupXemEN) {
        this.popupXemEN = popupXemEN;
    }

    public RichPopup getPopupXemEN() {
        return popupXemEN;
    }

    public void setPopupDeleteVN(RichPopup popupDeleteVN) {
        this.popupDeleteVN = popupDeleteVN;
    }

    public RichPopup getPopupDeleteVN() {
        return popupDeleteVN;
    }

    public void setPopupDeleteEn(RichPopup popupDeleteEn) {
        this.popupDeleteEn = popupDeleteEn;
    }

    public RichPopup getPopupDeleteEn() {
        return popupDeleteEn;
    }

    public void setPopupValidateVN(RichPopup popupValidateVN) {
        this.popupValidateVN = popupValidateVN;
    }

    public RichPopup getPopupValidateVN() {
        return popupValidateVN;
    }

    public void setPopupValidateEN(RichPopup popupValidateEN) {
        this.popupValidateEN = popupValidateEN;
    }

    public RichPopup getPopupValidateEN() {
        return popupValidateEN;
    }
}
